home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-08-18 | 62.4 KB | 1,560 lines |
- [VRML]
-
- The Virtual Reality Modeling Language
-
- Version 1.0 Specification
-
- 26-MAY-95
-
- Gavin Bell, Silicon Graphics, Inc.
- Anthony Parisi, Intervista Software
- Mark Pesce, VRML List Moderator
-
- -------------------------------------------------------------------------------
-
- Acknowledgements
-
- I want to thank three people who have been absolutely instrumental in
- the design process: Brian Behlendorf, whose drive (and disk space)
- made this process happen; and Tony Parisi and Gavin Bell, the final
- authors of this specification, who have put in a great deal of design
- work, ensuring that we have a satisfactory product. My hat goes off
- to all of them, and to all of you who have made this process a
- success.
-
- Mark Pesce
-
- I would like to add a personal note of thanks to Jan Hardenbergh of
- Oki Advanced Products for his diligent efforts to keep the
- specification process on track, and his invaluable editing
- assistance. I would also like to acknowledge Chris Marrin of Silicon
- Graphics for his timely contributions to the final design.
-
- Tony Parisi
-
- Revision History
-
- * First Draft - November 2, 1994
- * Second Draft - May 8, 1995
- * Third Draft - May 26, 1995
-
- Table of Contents
-
- * Introduction
-
- o VRML Mission Statement
- o History
- o Version 1.0 Requirements
-
- * Language Specification
-
- o Language Basics
- o Coordinate System
- o Fields
- o Nodes
- o Instancing
- o Extensibility
- o An Example
-
- * Browser Considerations
-
- o File Extensions
- o MIME Types
-
- -------------------------------------------------------------------------------
-
- Introduction
-
- The Virtual Reality Modeling Language (VRML) is a language for describing
- multi-participant interactive simulations -- virtual worlds networked via the
- global Internet and hyperlinked with the World Wide Web. All aspects of virtual
- world display, interaction and internetworking can be specified using VRML. It
- is the intention of its designers that VRML become the standard language for
- interactive simulation within the World Wide Web.
-
- The first version of VRML allows for the creation of virtual worlds with
- limited interactive behavior. These worlds can contain objects which have
- hyperlinks to other worlds, HTML documents or other valid MIME types. When the
- user selects an object with a hyperlink, the appropriate MIME viewer is
- launched. When the user selects a link to a VRML document from within a
- correctly configured WWW browser, a VRML viewer is launched. Thus VRML viewers
- are the perfect companion applications to standard WWW browsers for navigating
- and visualizing the Web. Future versions of VRML will allow for richer
- behaviors, including animations, motion physics and real-time multi-user
- interaction.
-
- This document specifies the features and syntax of Version 1.0 of VRML.
-
- VRML Mission Statement
-
- The history of the development of the Internet has had three distinct phases;
- first, the development of the TCP/IP infrastructure which allowed documents and
- data to be stored in a proximally independent way; that is, Internet provided a
- layer of abstraction between data sets and the hosts which manipulated them.
- While this abstraction was useful, it was also confusing; without any clear
- sense of "what went where", access to Internet was restricted to the class of
- sysops/net surfers who could maintain internal cognitive maps of the data
- space.
-
- Next, Tim Berners-Lee's work at CERN, where he developed the hypermedia system
- known as World Wide Web, added another layer of abstraction to the existing
- structure. This abstraction provided an "addressing" scheme, a unique
- identifier (the Universal Resource Locator), which could tell anyone "where to
- go and how to get there" for any piece of data within the Web. While useful, it
- lacked dimensionality; there's no there there within the web, and the only type
- of navigation permissible (other than surfing) is by direct reference. In other
- words, I can only tell you how to get to the VRML Forum home page by saying,
- "http://www.wired.com/", which is not human-centered data. In fact, I need to
- make an effort to remember it at all. So, while the World Wide Web provides a
- retrieval mechanism to complement the existing storage mechanism, it leaves a
- lot to be desired, particularly for human beings.
-
- Finally, we move to "perceptualized" Internetworks, where the data has been
- sensualized, that is, rendered sensually. If something is represented
- sensually, it is possible to make sense of it. VRML is an attempt (how
- successful, only time and effort will tell) to place humans at the center of
- the Internet, ordering its universe to our whims. In order to do that, the most
- important single element is a standard that defines the particularities of
- perception. Virtual Reality Modeling Language is that standard, designed to be
- a universal description language for multi-participant simulations.
-
- These three phases, storage, retrieval, and perceptualization are analogous to
- the human process of consciousness, as expressed in terms of semantics and
- cognitive science. Events occur and are recorded (memory); inferences are drawn
- from memory (associations), and from sets of related events, maps of the
- universe are created (cognitive perception). What is important to remember is
- that the map is not the territory, and we should avoid becoming trapped in any
- single representation or world-view. Although we need to design to avoid
- disorientation, we should always push the envelope in the kinds of experience
- we can bring into manifestation!
-
- This document is the living proof of the success of a process that was
- committed to being open and flexible, responsive to the needs of a growing Web
- community. Rather than re-invent the wheel, we have adapted an existing
- specification (Open Inventor) as the basis from which our own work can grow,
- saving years of design work and perhaps many mistakes. Now our real work can
- begin; that of rendering our noospheric space.
-
- History
-
- VRML was conceived in the spring of 1994 at the first annual World Wide Web
- Conference in Geneva, Switzerland. Tim Berners-Lee and Dave Raggett organized a
- Birds-of-a-Feather (BOF) session to discuss Virtual Reality interfaces to the
- World Wide Web. Several BOF attendees described projects already underway to
- build three dimensional graphical visualization tools which interoperate with
- the Web. Attendees agreed on the need for these tools to have a common language
- for specifying 3D scene description and WWW hyperlinks -- an analog of HTML for
- virtual reality. The term Virtual Reality Markup Language (VRML) was coined,
- and the group resolved to begin specification work after the conference. The
- word 'Markup' was later changed to 'Modeling' to reflect the graphical nature
- of VRML.
-
- Shortly after the Geneva BOF session, the www-vrml mailing list was created to
- discuss the development of a specification for the first version of VRML. The
- response to the list invitation was overwhelming: within a week, there were
- over a thousand members. After an initial settling-in period, list moderator
- Mark Pesce of Labyrinth Group announced his intention to have a draft version
- of the specification ready by the WWW Fall 1994 conference, a mere five months
- away. There was general agreement on the list that, while this schedule was
- aggressive, it was achievable provided that the requirements for the first
- version were not too ambitious and that VRML could be adapted from an existing
- solution. The list quickly agreed upon a set of requirements for the first
- version, and began a search for technologies which could be adapted to fit the
- needs of VRML.
-
- The search for existing technologies turned up a several worthwhile candidates.
- After much deliberation the list came to a consensus: the Open Inventor ASCII
- File Format from Silicon Graphics, Inc. The Inventor File Format supports
- complete descriptions of 3D scenes with polygonally rendered objects, lighting,
- materials, ambient properties and realism effects. A subset of the Inventor
- File Format, with extensions to support networking, forms the basis of VRML.
- Gavin Bell of Silicon Graphics has adapted the Inventor File Format for VRML,
- with design input from the mailing list. SGI has publicly stated that the file
- format is available for use in the open market, and have contributed a file
- format parser into the public domain to bootstrap VRML viewer development.
-
- Version 1.0 Requirements
-
- VRML 1.0 is designed to meet the following requirements:
-
- * Platform independence
- * Extensibility
- * Ability to work well over low-bandwidth connections
-
- As with HTML, the above are absolute requirements for a network language
- standard; they should need little explanation here.
-
- Early on the designers decided that VRML would not be an extension to HTML.
- HTML is designed for text, not graphics. Also, VRML requires even more finely
- tuned network optimizations than HTML; it is expected that a typical VRML scene
- will be composed of many more "inline" objects and served up by many more
- servers than a typical HTML document. Moreover, HTML is an accepted standard,
- with existing implementations that depend on it. To impede the HTML design
- process with VRML issues and constrain the VRML design process with HTML
- compatibility concerns would be to do both languages a disservice. As a network
- language, VRML will succeed or fail independent of HTML.
-
- It was also decided that, except for the hyperlinking feature, the first
- version of VRML would not support interactive behaviors. This was a practical
- decision intended to streamline design and implementation. Design of a language
- for describing interactive behaviors is a big job, especially when the language
- needs to express behaviors of objects communicating on a network. Such
- languages do exist; if we had chosen one of them, we would have risked getting
- into a "language war." People don't get excited about the syntax of a language
- for describing polygonal objects; people get very excited about the syntax of
- real languages for writing programs. Religious wars can extend the design
- process by months or years. In addition, networked inter-object operation
- requires brokering services such as those provided by CORBA or OLE, services
- which don't exist yet within WWW; we would have had to invent them. Finally, by
- keeping behaviors out of Version 1, we have made it a much smaller task to
- implement a viewer. We acknowledge that support for arbitrary interactive
- behaviors is critical to the long-term success of VRML; they will be included
- in Version 2.
-
- -------------------------------------------------------------------------------
-
- Language Specification
-
- The language specification is divided into the following sections:
-
- * Language Basics
- * Coordinate System
- * Fields
- * Nodes
- * Instancing
- * Extensibility
- * An Example
-
- Language Basics
-
- At the highest level of abstraction, VRML is just a way for objects to read and
- write themselves. Theoretically, the objects can contain anything -- 3D
- geometry, MIDI data, JPEG images, anything. VRML defines a set of objects
- useful for doing 3D graphics. These objects are called Nodes.
-
- Nodes are arranged in hierarchical structures called scene graphs. Scene graphs
- are more than just a collection of nodes; the scene graph defines an ordering
- for the nodes. The scene graph has a notion of state -- nodes earlier in the
- scene can affect nodes that appear later in the scene. For example, a Rotation
- or Material node will affect the nodes after it in the scene. A mechanism is
- defined to limit the effects of properties (separator nodes), allowing parts of
- the scene graph to be functionally isolated from other parts.
-
- A node has the following characteristics:
-
- * What kind of object it is. A node might be a cube, a sphere, a texture
- map, a transformation, etc.
-
- * The parameters that distinguish this node from other nodes of the same
- type. For example, each Sphere node might have a different radius, and
- different texture maps nodes will certainly contain different images to
- use as the texture maps. These parameters are called Fields. A node can
- have 0 or more fields.
-
- * A name to identify this node. Being able to name nodes and refer to them
- elsewhere is very powerful; it allows a scene's author to give hints to
- applications using the scene about what is in the scene, and creates
- possibilities for very powerful scripting extensions. Nodes do not have to
- be named, but if they are named, they can have only one name. However,
- names do not have to be unique-- several different nodes may be given the
- same name.
-
- * Child nodes. Object hierarchy is implemented by allowing some types of
- nodes to contain other nodes. Parent nodes traverse their children in
- order during rendering. Nodes that may have children are referred to as
- group nodes. Group nodes can have zero or more children.
-
- The syntax chosen to represent these pieces of information is straightforward:
-
- DEF objectname objecttype { fields children }
-
- Only the object type and curly braces are required; nodes may or may not have a
- name, fields, and children.
-
- Node names must not begin with a digit, and must not contain spaces or control
- characters, single or double quote characters, backslashes, curly braces, the
- plus character or the period character.
-
- For example, this file contains a simple scene defining a view of a red cone
- and a blue sphere, lit by a directional light:
-
- #VRML V1.0 ascii
- Separator {
- DirectionalLight {
- direction 0 0 -1 # Light shining from viewer into scene
- }
- PerspectiveCamera {
- position -8.6 2.1 5.6
- orientation -0.1352 -0.9831 -0.1233 1.1417
- focalDistance 10.84
- }
- Separator { # The red sphere
- Material {
- diffuseColor 1 0 0 # Red
- }
- Translation { translation 3 0 1 }
- Sphere { radius 2.3 }
- }
- Separator { # The blue cube
- Material {
- diffuseColor 0 0 1 # Blue
- }
- Transform {
- translation -2.4 .2 1
- rotation 0 1 1 .9
- }
- Cube {}
- }
-
-
- General Syntax
-
- For easy identification of VRML files, every VRML file must begin with the
- characters:
-
- #VRML V1.0 ascii
-
- Any characters after these on the same line are ignored. The line is terminated
- by either the ASCII newline or carriage-return characters.
-
- The '#' character begins a comment; all characters until the next newline or
- carriage return are ignored. The only exception to this is within string
- fields, where the '#' character will be part of the string.
-
- Note: Comments and whitespace may not be preserved; in particular, a VRML
- document server may strip comments and extraneous whitespace from a VRML file
- before transmitting it. Info nodes should be used for persistent information
- like copyrights or author information. Info nodes could also be used for object
- descriptions.
-
- Blanks, tabs, newlines and carriage returns are whitespace characters wherever
- they appear outside of string fields. One or more whitespace characters
- separates the syntactical entities in VRML files, where necessary.
-
- After the required header, a VRML file contains exactly one VRML node. That
- node may of course be a group node, containing any number of other nodes.
-
- Coordinate System
-
- VRML uses a cartesian, right-handed, 3-dimensional coordinate system. By
- default, objects are projected onto a 2-dimensional device by projecting them
- in the direction of the positive Z axis, with the positive X axis to the right
- and the positive Y axis up. A camera or modeling transformation may be used to
- alter this default projection.
-
- The standard unit for lengths and distances specified is meters. The standard
- unit for angles is radians.
-
- Fields
-
- There are two general classes of fields; fields that contain a single value
- (where a value may be a single number, a vector, or even an image), and fields
- that contain multiple values. Single-valued fields all have names that begin
- with "SF", multiple-valued fields have names that begin with "MF". Each field
- type defines the format for the values it writes.
-
- Multiple-valued fields are written as a series of values separated by commas,
- all enclosed in square brackets. If the field has zero values then only the
- square brackets ("[]") are written. The last may optionally be followed by a
- comma. If the field has exactly one value, the brackets may be omitted and just
- the value written. For example, all of the following are valid for a
- multiple-valued field containing the single integer value 1:
-
-
- [1,]
- [ 1 ]
-
- SFBitMask
-
- A single-value field that contains a mask of bit flags. Nodes that use this
- field class define mnemonic names for the bit flags. SFBitMasks are written to
- file as one or more mnemonic enumerated type names, in this format:
-
- ( flag1 | flag2 | ... )
-
- If only one flag is used in a mask, the parentheses are optional. These names
- differ among uses of this field in various node classes.
-
- SFBool
-
- A field containing a single boolean (true or false) value. SFBools may be
- written as 0 (representing FALSE), 1, TRUE, or FALSE.
-
- SFColor
-
- A single-value field containing a color. SFColors are written to file as an RGB
- triple of floating point numbers in standard scientific notation, in the range
- 0.0 to 1.0.
-
- SFEnum
-
- A single-value field that contains an enumerated type value. Nodes that use
- this field class define mnemonic names for the values. SFEnums are written to
- file as a mnemonic enumerated type name. The name differs among uses of this
- field in various node classes.
-
- SFFloat
-
- A field that contains one single-precision floating point number. SFFloats are
- written to file in standard scientific notation.
-
- SFImage
-
- A field that contain an uncompressed 2-dimensional color or greyscale image.
-
- SFImages are written to file as three integers representing the width, height
- and number of components in the image, followed by width*height hexadecimal
- values representing the pixels in the image, separated by whitespace. A
- one-component image will have one-byte hexadecimal values representing the
- intensity of the image. For example, 0xFF is full intensity, 0x00 is no
- intensity. A two-component image puts the intensity in the first (high) byte
- and the transparency in the second (low) byte. Pixels in a three-component
- image have the red component in the first (high) byte, followed by the green
- and blue components (so 0xFF0000 is red). Four-component images put the
- transparency byte after red/green/blue (so 0x0000FF80 is semi-transparent
- blue). A value of 1.0 is completely transparent, 0.0 is completely opaque.
- Note: each pixel is actually read as a single unsigned number, so a 3-component
- pixel with value "0x0000FF" can also be written as "0xFF" or "255" (decimal).
- Pixels are specified from left to right, bottom to top. The first hexadecimal
- value is the lower left pixel of the image, and the last value is the upper
- right pixel.
-
- For example,
-
- 1 2 1 0xFF 0x00
-
- is a 1 pixel wide by 2 pixel high greyscale image, with the bottom pixel white
- and the top pixel black. And:
-
- 2 4 3 0xFF0000 0xFF00 0 0 0 0 0xFFFFFF 0xFFFF00
-
- is a 2 pixel wide by 4 pixel high RGB image, with the bottom left pixel red,
- the bottom right pixel green, the two middle rows of pixels black, the top left
- pixel white, and the top right pixel yellow.
-
- SFLong
-
- A field containing a single long (32-bit) integer. SFLongs are written to file
- as an integer in decimal, hexadecimal (beginning with '0x') or octal (beginning
- with '0') format.
-
- SFMatrix
-
- A field containing a transformation matrix. SFMatrices are written to file in
- row-major order as 16 floating point numbers separated by whitespace. For
- example, a matrix expressing a translation of 7.3 units along the X axis is
- written as:
-
- 1 0 0 0 0 1 0 0 0 0 1 0 7.3 0 0 1
-
- SFRotation
-
- A field containing an arbitrary rotation. SFRotations are written to file as
- four floating point values separated by whitespace. The 4 values represent an
- axis of rotation followed by the amount of right-handed rotation about that
- axis, in radians. For example, a 180 degree rotation about the Y axis is:
-
- 0 1 0 3.14159265
-
- SFString
-
- A field containing an ASCII string (sequence of characters). SFStrings are
- written to file as a sequence of ASCII characters in double quotes (optional if
- the string doesn't contain any whitespace). Any characters (including newlines)
- may appear within the quotes. To include a double quote character within the
- string, precede it with a backslash. For example:
-
- Testing
- "One, Two, Three"
- "He said, \"Immel did it!\""
-
- are all valid strings.
-
- SFVec2f
-
- Field containing a two-dimensional vector. SFVec2fs are written to file as a
- pair of floating point values separated by whitespace.
-
- SFVec3f
-
- Field containing a three-dimensional vector. SFVec3fs are written to file as
- three floating point values separated by whitespace.
-
- MFColor
-
- A multiple-value field that contains any number of RGB colors. MFColors are
- written to file as one or more RGB triples of floating point numbers in
- standard scientific notation. When more than one value is present, all of the
- values must be enclosed in square brackets and separated by commas. For
- example:
-
- [ 1.0 0.0 0.0, 0 1 0, 0 0 1 ]
-
- represents the three colors red, green, and blue.
-
- MFLong
-
- A multiple-value field that contains any number of long (32-bit) integers.
- MFLongs are written to file as one or more integer values, in decimal,
- hexadecimal or octal format. When more than one value is present, all the
- values are enclosed in square brackets and separated by commas; for example:
-
- [ 17, -0xE20, -518820 ]
-
- MFVec2f
-
- A multiple-value field that contains any number of two-dimensional vectors.
- MFVec2fs are written to file as one or more pairs of floating point values
- separated by whitespace. When more than one value is present, all of the values
- are enclosed in square brackets and separated by commas; for example:
-
- [ 0 0, 1.2 3.4, 98.6 -4e1 ]
-
- MFVec3f
-
- A multiple-value field that contains any number of three-dimensional vectors.
- MFVec3fs are written to file as one or more triples of floating point values
- separated by whitespace. When more than one value is present, all of the values
- are enclosed in square brackets and separated by commas; for example:
-
- [ 0 0 0, 1.2 3.4 5.6, 98.6 -4e1 212 ]
-
- Nodes
-
- VRML defines several different classes of nodes. Most of the nodes can be
- classified into one of three categories; shape, property or group. Shape nodes
- define the geometry in the scene. Conceptually, they are the only nodes that
- draw anything. Property nodes affect the way shapes are drawn. And grouping
- nodes gather other nodes together, allowing collections of nodes to be treated
- as a single object. Some group nodes also control whether or not their children
- are drawn.
-
- Nodes may contain zero or more fields. Each node type defines the type, name,
- and default value for each of its fields. The default value for the field is
- used if a value for the field is not specified in the VRML file. The order in
- which the fields of a node are read is not important; for example, "Cube {
- width 2 height 4 depth 6 }" and "Cube { height 4 depth 6 width 2 }" are
- equivalent.
-
- Here are the 36 nodes grouped by type. The first group are the shape nodes.
- These specify geometry:
-
- AsciiText, Cone, Cube, Cylinder, IndexedFaceSet, IndexedLineSet, PointSet,
- Sphere,
-
- The second group are the properties. These can be further grouped into
- properties of the geometry and its appearance, matrix or transform properties,
- and cameras and lights: Coordinate3, FontStyle, Info, LOD, Material,
- MaterialBinding, Normal, NormalBinding, Texture2, Texture2Transform,
- TextureCoordinate2, ShapeHints
-
- MatrixTransform, Rotation, Scale, Transform, Translation
-
- OrthographicCamera, PerspectiveCamera
-
- DirectionalLight, PointLight, SpotLight
-
- These are the group nodes:
-
- Group, Separator, Switch, TransformSeparator, WWWAnchor
-
- Finally, the WWWInline node does not fit neatly into any category.
-
- WWWInline
-
- AsciiText
-
- This node represents strings of text characters from the ASCII coded character
- set. The first string is rendered with its baseline at (0,0,0). All subsequent
- strings advance y by -(size * spacing). See FontStyle for a description of the
- size field. The justification field determines the placement of the strings in
- the x dimension. LEFT (the default) places the left edge of each string at x=0.
- CENTER places the center of each string at x=0. RIGHT places the right edge of
- each string at x=0. Text is rendered from left to right, top to bottom in the
- font set by FontStyle. The width field defines a suggested width constraint for
- each string. The default is to use the natural width of each string. Setting
- any value to 0 indicates the natural width should be used for that string.
-
- The text is transformed by the current cumulative transformation and is drawn
- with the current material and texture.
-
- Textures are applied to 3D text as follows. The texture origin is at the origin
- of the first string, as determined by the justification. The texture is scaled
- equally in both S and T dimensions, with the font height representing 1 unit. S
- increases to the right. The T origin can occur anywhere along each character,
- depending on how that character's outline is defined.
-
- JUSTIFICATION
- LEFT Align left edge of text to origin
- CENTER Align center of text to origin
- RIGHT Align right edge of text to origin
-
- FILE FORMAT/DEFAULTS
- AsciiText {
- string "" # MFString
- spacing 1 # SFFloat
- justification LEFT # SFEnum
- width 0 # MFFloat
- }
-
- Cone
-
- This node represents a simple cone whose central axis is aligned with the
- y-axis. By default, the cone is centered at (0,0,0) and has a size of -1 to +1
- in all three directions. The cone has a radius of 1 at the bottom and a height
- of 2, with its apex at 1 and its bottom at -1. The cone has two parts: the
- sides and the bottom.
-
- The cone is transformed by the current cumulative transformation and is drawn
- with the current texture and material.
-
- If the current material binding is PER_PART or PER_PART_INDEXED, the first
- current material is used for the sides of the cone, and the second is used for
- the bottom. Otherwise, the first material is used for the entire cone.
-
- When a texture is applied to a cone, it is applied differently to the sides and
- bottom. On the sides, the texture wraps counterclockwise (from above) starting
- at the back of the cone. The texture has a vertical seam at the back,
- intersecting the yz-plane. For the bottom, a circle is cut out of the texture
- square and applied to the cone's base circle. The texture appears right side up
- when the top of the cone is rotated towards the -Z axis.
-
- PARTS
- SIDES The conical part
- BOTTOM The bottom circular face
- ALL All parts
-
- FILE FORMAT/DEFAULTS
- Cone {
- parts ALL # SFBitMask
- bottomRadius 1 # SFFloat
- height 2 # SFFloat
- }
-
- Coordinate3
-
- This node defines a set of 3D coordinates to be used by a subsequent
- IndexedFaceSet, IndexedLineSet, or PointSet node. This node does not produce a
- visible result during rendering; it simply replaces the current coordinates in
- the rendering state for subsequent nodes to use.
-
- FILE FORMAT/DEFAULTS
- Coordinate3 {
- point 0 0 0 # MFVec3f
- }
-
- Cube
-
- This node represents a cuboid aligned with the coordinate axes. By default, the
- cube is centered at (0,0,0) and measures 2 units in each dimension, from -1 to
- +1. The cube is transformed by the current cumulative transformation and is
- drawn with the current material and texture.
-
- If the current material binding is PER_PART, PER_PART_INDEXED, PER_FACE, or
- PER_FACE_INDEXED, materials will be bound to the faces of the cube in this
- order: front (+Z), back (-Z), left (-X), right (+X), top (+Y), and bottom (-Y).
-
- Textures are applied individually to each face of the cube; the entire texture
- goes on each face. On the front, back, right, and left sides of the cube, the
- texture is applied right side up. On the top, the texture appears right side up
- when the top of the cube is tilted toward the camera. On the bottom, the
- texture appears right side up when the top of the cube is tilted towards the -Z
- axis.
-
- FILE FORMAT/DEFAULTS
- Cube {
- width 2 # SFFloat
- height 2 # SFFloat
- depth 2 # SFFloat
- }
-
- Cylinder
-
- This node represents a simple capped cylinder centered around the y-axis. By
- default, the cylinder is centered at (0,0,0) and has a default size of -1 to +1
- in all three dimensions. The cylinder has three parts: the sides, the top (y =
- +1) and the bottom (y = -1). You can use the radius and height fields to create
- a cylinder with a different size.
-
- The cylinder is transformed by the current cumulative transformation and is
- drawn with the current material and texture.
-
- If the current material binding is PER_PART or PER_PART_INDEXED, the first
- current material is used for the sides of the cylinder, the second is used for
- the top, and the third is used for the bottom. Otherwise, the first material is
- used for the entire cylinder.
-
- When a texture is applied to a cylinder, it is applied differently to the
- sides, top, and bottom. On the sides, the texture wraps counterclockwise (from
- above) starting at the back of the cylinder. The texture has a vertical seam at
- the back, intersecting the yz-plane. For the top and bottom, a circle is cut
- out of the texture square and applied to the top or bottom circle. The top
- texture appears right side up when the top of the cylinder is tilted toward the
- +Z axis, and the bottom texture appears right side up when the top of the
- cylinder is tilted toward the -Z axis.
-
- PARTS
- SIDES The cylindrical part
- TOP The top circular face
- BOTTOM The bottom circular face
- ALL All parts
-
- FILE FORMAT/DEFAULTS
- Cylinder {
- parts ALL # SFBitMask
- radius 1 # SFFloat
- height 2 # SFFloat
- }
-
- DirectionalLight
-
- This node defines a directional light source that illuminates along rays
- parallel to a given 3-dimensional vector.
-
- A light node defines an illumination source that may affect subsequent shapes
- in the scene graph, depending on the current lighting style. Light sources are
- affected by the current transformation. A light node under a separator does not
- affect any objects outside that separator.
-
- FILE FORMAT/DEFAULTS
- DirectionalLight {
- on TRUE # SFBool
- intensity 1 # SFFloat
- color 1 1 1 # SFColor
- direction 0 0 -1 # SFVec3f
- }
-
- FontStyle
-
- This node defines the current font style used for all subsequent AsciiText.
- Font attributes only are defined. It is up to the browser to assign specific
- fonts to the various attribute combinations. The size field specifies the
- height (in object space units) of glyphs rendered and determines the vertical
- spacing of adjacent lines of text.
-
- FAMILY
-
- SERIF Serif style (such as TimesRoman)
- SANS Sans Serif Style (such as Helvetica)
- TYPEWRITER Fixed pitch style (such as Courier)
-
- STYLE
- NONE No modifications to family
- BOLD Embolden family
- ITALIC Italicize or Slant family
-
- FILE FORMAT/DEFAULTS
- FontStyle {
- size 10 # SFFloat
- family SERIF # SFEnum
- style NONE # SFBitMask
- }
-
- Group
-
- This node defines the base class for all group nodes. Group is a node that
- contains an ordered list of child nodes. This node is simply a container for
- the child nodes and does not alter the traversal state in any way. During
- traversal, state accumulated for a child is passed on to each successive child
- and then to the parents of the group (Group does not push or pop traversal
- state as separator does).
-
- FILE FORMAT/DEFAULTS
- Group {
- }
-
- IndexedFaceSet
-
- This node represents a 3D shape formed by constructing faces (polygons) from
- vertices located at the current coordinates. IndexedFaceSet uses the indices in
- its coordIndex field to specify the polygonal faces. An index of -1 indicates
- that the current face has ended and the next one begins.
-
- The vertices of the faces are transformed by the current transformation matrix.
-
- Treatment of the current material and normal binding is as follows: The
- PER_PART and PER_FACE bindings specify a material or normal for each face.
- PER_VERTEX specifies a material or normal for each vertex. The corresponding
- _INDEXED bindings are the same, but use the materialIndex or normalIndex
- indices. The DEFAULT material binding is equal to OVERALL. The DEFAULT normal
- binding is equal to PER_VERTEX_INDEXED; if insufficient normals exist in the
- state, vertex normals will be generated automatically.
-
- Explicit texture coordinates (as defined by TextureCoordinate2) may be bound to
- vertices of an indexed shape by using the indices in the textureCoordIndex
- field. As with all vertex-based shapes, if there is a current texture but no
- texture coordinates are specified, a default texture coordinate mapping is
- calculated using the bounding box of the shape. The longest dimension of the
- bounding box defines the S coordinates, and the next longest defines the T
- coordinates. The value of the S coordinate ranges from 0 to 1, from one end of
- the bounding box to the other. The T coordinate ranges between 0 and the ratio
- of the second greatest dimension of the bounding box to the greatest dimension.
-
- Be sure that the indices contained in the coordIndex, materialIndex,
- normalIndex, and textureCoordIndex fields are valid with respect to the current
- state, or errors will occur.
-
- FILE FORMAT/DEFAULTS
- IndexedFaceSet {
- coordIndex 0 # MFLong
- materialIndex -1 # MFLong
- normalIndex -1 # MFLong
- textureCoordIndex -1 # MFLong
- }
-
- IndexedLineSet
-
- This node represents a 3D shape formed by constructing polylines from vertices
- located at the current coordinates. IndexedLineSet uses the indices in its
- coordIndex field to specify the polylines. An index of -1 indicates that the
- current polyline has ended and the next one begins.
-
- The coordinates of the line set are transformed by the current cumulative
- transformation.
-
- Treatment of the current material and normal binding is as follows: The
- PER_PART binding specifies a material or normal for each segment of the line.
- The PER_FACE binding specifies a material or normal for each polyline.
- PER_VERTEX specifies a material or normal for each vertex. The corresponding
- _INDEXED bindings are the same, but use the materialIndex or normalIndex
- indices. The DEFAULT material binding is equal to OVERALL. The DEFAULT normal
- binding is equal to PER_VERTEX_INDEXED; if insufficient normals exist in the
- state, the lines will be drawn unlit. The same rules for texture coordinate
- generation as IndexedFaceSet are used.
-
- FILE FORMAT/DEFAULTS
- IndexedLineSet {
- coordIndex 0 # MFLong
- materialIndex -1 # MFLong
- normalIndex -1 # MFLong
- textureCoordIndex -1 # MFLong
- }
-
- Info
-
- This class defines an information node in the scene graph. This node has no
- effect during traversal. It is used to store information in the scene graph,
- typically for application-specific purposes, copyright messages, or other
- strings.
-
- Info {
- string "<Undefined info>" # SFString
- }
-
- LOD
-
- This group node is used to allow applications to switch between various
- representations of objects automatically. The children of this node typically
- represent the same object or objects at varying levels of detail, from highest
- detail to lowest.
-
- The specified center point of the LOD is transformed by the current
- transformation into world space, and the distance from the transformed center
- to the world-space eye point is calculated. If the distance is less than the
- first value in the ranges array, then the first child of the LOD group is
- drawn. If between the first and second values in the ranges array, the second
- child is drawn, etc. If there are N values in the ranges array, the LOD group
- should have N+1 children. Specifying too few children will result in the last
- child being used repeatedly for the lowest levels of detail; if too many
- children are specified, the extra children will be ignored. Each value in the
- ranges array should be less than the previous value, otherwise results are
- undefined.
-
- FILE FORMAT/DEFAULTS
- LOD {
- range [ ] # MFFloat
- center 0 0 0 # SFVec3f
- }
-
- Material
-
- This node defines the current surface material properties for all subsequent
- shapes. Material sets several components of the current material during
- traversal. Different shapes interpret materials with multiple values
- differently. To bind materials to shapes, use a MaterialBinding node.
-
- FILE FORMAT/DEFAULTS
- Material {
- ambientColor 0.2 0.2 0.2 # MFColor
- diffuseColor 0.8 0.8 0.8 # MFColor
- specularColor 0 0 0 # MFColor
- emissiveColor 0 0 0 # MFColor
- shininess 0.2 # MFFloat
- transparency 0 # MFFloat
- }
-
- MaterialBinding
-
- This node specifies how the current materials are bound to shapes that follow
- in the scene graph. Each shape node may interpret bindings differently. The
- current material always has a base value, which is defined by the first value
- of all material fields. Since material fields may have multiple values, the
- binding determines how these values are distributed over a shape.
-
- The bindings for faces and vertices are meaningful only for shapes that are
- made from faces and vertices. Similarly, the indexed bindings are only used by
- the shapes that allow indexing.
-
- When multiple material values are bound, the values are cycled through, based
- on the period of the material component with the most values. For example, the
- following table shows the values used when cycling through (or indexing into) a
- material with 2 ambient colors, 3 diffuse colors, and 1 of all other components
- in the current material. (The period of this material cycle is 3):
-
- Material Ambient color Diffuse color Other
- 0 0 0 0
- 1 1 1 0
- 2 1 2 0
- 3 (same as 0) 0 0 0
-
- BINDINGS
- DEFAULT Use default binding
- OVERALL Whole object has same material
- PER_PART One material for each part of object
- PER_PART_INDEXED One material for each part, indexed
- PER_FACE One material for each face of object
- PER_FACE_INDEXED One material for each face, indexed
- PER_VERTEX One material for each vertex of object
- PER_VERTEX_INDEXED One material for each vertex, indexed
-
- FILE FORMAT/DEFAULTS
- MaterialBinding {
- value DEFAULT # SFEnum
- }
-
- MatrixTransform
-
- This node defines a geometric 3D transformation with a 4 by 4 matrix. Note that
- some matrices (such as singular ones) may result in errors.
-
- FILE FORMAT/DEFAULTS
- MatrixTransform {
- matrix 1 0 0 0 # SFMatrix
- 0 1 0 0
- 0 0 1 0
- 0 0 0 1
- }
-
- Normal
-
- This node defines a set of 3D surface normal vectors to be used by vertex-based
- shape nodes (IndexedFaceSet, IndexedLineSet, PointSet) that follow it in the
- scene graph. This node does not produce a visible result during rendering; it
- simply replaces the current normals in the rendering state for subsequent nodes
- to use. This node contains one multiple-valued field that contains the normal
- vectors.
-
- FILE FORMAT/DEFAULTS
- Normal {
- vector 0 0 1 # MFVec3f
- }
-
- NormalBinding
-
- This node specifies how the current normals are bound to shapes that follow in
- the scene graph. Each shape node may interpret bindings differently.
-
- The bindings for faces and vertices are meaningful only for shapes that are
- made from faces and vertices. Similarly, the indexed bindings are only used by
- the shapes that allow indexing. For bindings that require multiple normals, be
- sure to have at least as many normals defined as are necessary; otherwise,
- errors will occur.
-
- BINDINGS
- DEFAULT Use default binding
- OVERALL Whole object has same normal
- PER_PART One normal for each part of object
- PER_PART_INDEXED One normal for each part, indexed
- PER_FACE One normal for each face of object
- PER_FACE_INDEXED One normal for each face, indexed
- PER_VERTEX One normal for each vertex of object
- PER_VERTEX_INDEXED One normal for each vertex, indexed
-
- FILE FORMAT/DEFAULTS
- NormalBinding {
- value DEFAULT # SFEnum
- }
-
- OrthographicCamera
-
- An orthographic camera defines a parallel projection from a viewpoint. This
- camera does not diminish objects with distance, as an PerspectiveCamera does.
- The viewing volume for an orthographic camera is a rectangular parallelepiped
- (a box).
-
- By default, the camera is located at (0,0,1) and looks along the negative
- z-axis; the position and orientation fields can be used to change these values.
- The height field defines the total height of the viewing volume.
-
- A camera can be placed in a VRML world to specify the initial location of the
- viewer when that world is entered. VRML browsers will typically modify the
- camera to allow a user to move through the virtual world.
-
- Cameras are affected by the current transformation, so you can position a
- camera by placing a transformation node before it in the scene graph . The
- default position and orientation of a camera is at (0,0,1) looking along the
- negative z-axis.
-
- FILE FORMAT/DEFAULTS
- OrthographicCamera {
- position 0 0 1 # SFVec3f
- orientation 0 0 1 0 # SFRotation
- focalDistance 5 # SFFloat
- height 2 # SFFloat
- }
-
- PerspectiveCamera
-
- A perspective camera defines a perspective projection from a viewpoint. The
- viewing volume for a perspective camera is a truncated right pyramid.
-
- By default, the camera is located at (0,0,1) and looks along the negative
- z-axis; the position and orientation fields can be used to change these values.
- The heightAngle field defines the total vertical angle of the viewing volume.
-
- See more on cameras in the OrthographicCamera description.
-
- FILE FORMAT/DEFAULTS
- PerspectiveCamera {
- position 0 0 1 # SFVec3f
- orientation 0 0 1 0 # SFRotation
- focalDistance 5 # SFFloat
- heightAngle 0.785398 # SFFloat
- }
-
- PointLight
-
- This node defines a point light source at a fixed 3D location. A point source
- illuminates equally in all directions; that is, it is omni- directional.
-
- A light node defines an illumination source that may affect subsequent shapes
- in the scene graph, depending on the current lighting style. Light sources are
- affected by the current transformation. A light node under a separator does not
- affect any objects outside that separator.
-
- FILE FORMAT/DEFAULTS
- PointLight {
- on TRUE # SFBool
- intensity 1 # SFFloat
- color 1 1 1 # SFColor
- location 0 0 1 # SFVec3f
- }
-
- PointSet
-
- This node represents a set of points located at the current coordinates.
- PointSet uses the current coordinates in order, starting at the index specified
- by the startIndex field. The number of points in the set is specified by the
- numPoints field. A value of -1 for this field indicates that all remaining
- values in the current coordinates are to be used as points.
-
- The coordinates of the point set are transformed by the current cumulative
- transformation. The points are drawn with the current material and texture.
-
- Treatment of the current material and normal binding is as follows: PER_PART,
- PER_FACE, and PER_VERTEX bindings bind one material or normal to each point.
- The DEFAULT material binding is equal to OVERALL. The DEFAULT normal binding is
- equal to PER_VERTEX. The startIndex is also used for materials or normals when
- the binding indicates that they should be used per vertex.
-
- FILE FORMAT/DEFAULTS
- PointSet {
- startIndex 0 # SFLong
- numPoints -1 # SFLong
- }
-
- Rotation
-
- This node defines a 3D rotation about an arbitrary axis through the origin. The
- rotation is accumulated into the current transformation, which is applied to
- subsequent shapes.
-
- FILE FORMAT/DEFAULTS
- Rotation {
- rotation 0 0 1 0 # SFRotation
- }
-
- See rotation field description for more information.
-
- Scale
-
- This node defines a 3D scaling about the origin. If the components of the
- scaling vector are not all the same, this produces a non-uniform scale.
-
- FILE FORMAT/DEFAULTS
- Scale {
- scaleFactor 1 1 1 # SFVec3f
- }
-
- Separator
-
- This group node performs a push (save) of the traversal state before traversing
- its children and a pop (restore) after traversing them. This isolates the
- separator's children from the rest of the scene graph. A separator can include
- lights, cameras, coordinates, normals, bindings, and all other properties.
-
- Separators can also perform render culling. Render culling skips over traversal
- of the separator's children if they are not going to be rendered, based on the
- comparison of the separator's bounding box with the current view volume.
- Culling is controlled by the renderCulling field. These are set to AUTO by
- default, allowing the implementation to decide whether or not to cull.
-
- CULLING ENUMS
- ON Always try to cull to the view volume
- OFF Never try to cull to the view volume
- AUTO Implementation-defined culling behavior
-
- FILE FORMAT/DEFAULTS
- Separator {
- renderCulling AUTO # SFEnum
- }
-
- ShapeHints
-
- The ShapeHints node indicates that IndexedFaceSets are solid, contain ordered
- vertices, or contain convex faces.
-
- These hints allow VRML implementations to optimize certain rendering features.
- Optimizations that may be performed include enabling back-face culling and
- disabling two-sided lighting. For example, if an object is solid and has
- ordered vertices, an implementation may turn on backface culling and turn off
- two-sided lighting. If the object is not solid but has ordered vertices, it may
- turn off backface culling and turn on two-sided lighting.
-
- The ShapeHints node also affects how default normals are generated. When an
- IndexedFaceSet has to generate default normals, it uses the creaseAngle field
- to determine which edges should be smoothly shaded and which ones should have a
- sharp crease. The crease angle is the angle between surface normals on adjacent
- polygons. For example, a crease angle of .5 radians (the default value) means
- that an edge between two adjacent polygonal faces will be smooth shaded if the
- normals to the two faces form an angle that is less than .5 radians (about 30
- degrees). Otherwise, it will be faceted.
-
- VERTEX ORDERING ENUMS
- UNKNOWN_ORDERING Ordering of vertices is unknown
- CLOCKWISE Face vertices are ordered clockwise
- (from the outside)
- COUNTERCLOCKWISE Face vertices are ordered counterclockwise
- (from the outside)
-
- SHAPE TYPE ENUMS
- UNKNOWN_SHAPE_TYPE Nothing is known about the shape
- SOLID The shape encloses a volume
-
- FACE TYPE ENUMS
- UNKNOWN_FACE_TYPE Nothing is known about faces
- CONVEX All faces are convex
-
- FILE FORMAT/DEFAULTS
- ShapeHints {
- vertexOrdering UNKNOWN_ORDERING # SFEnum
- shapeType UNKNOWN_SHAPE_TYPE # SFEnum
- faceType CONVEX # SFEnum
- creaseAngle 0.5 # SFFloat
- }
-
- Sphere
-
- This node represents a sphere. By default, the sphere is centered at the origin
- and has a radius of 1. The sphere is transformed by the current cumulative
- transformation and is drawn with the current material and texture.
-
- A sphere does not have faces or parts. Therefore, the sphere ignores material
- and normal bindings, using the first material for the entire sphere and using
- its own normals. When a texture is applied to a sphere, the texture covers the
- entire surface, wrapping counterclockwise from the back of the sphere. The
- texture has a seam at the back on the yz-plane.
-
- FILE FORMAT/DEFAULTS
- Sphere {
- radius 1 # SFFloat
- }
-
- SpotLight
-
- This node defines a spotlight light source. A spotlight is placed at a fixed
- location in 3-space and illuminates in a cone along a particular direction. The
- intensity of the illumination drops off exponentially as a ray of light
- diverges from this direction toward the edges of the cone. The rate of drop-off
- and the angle of the cone are controlled by the dropOffRate and cutOffAngle
- fields.
-
- A light node defines an illumination source that may affect subsequent shapes
- in the scene graph, depending on the current lighting style. Light sources are
- affected by the current transformation. A light node under a separator does not
- affect any objects outside that separator.
-
- FILE FORMAT/DEFAULTS
- SpotLight {
- on TRUE # SFBool
- intensity 1 # SFFloat
- color 1 1 1 # SFVec3f
- location 0 0 1 # SFVec3f
- direction 0 0 -1 # SFVec3f
- dropOffRate 0 # SFFloat
- cutOffAngle 0.785398 # SFFloat
- }
-
- Switch
-
- This group node traverses one, none, or all of its children. One can use this
- node to switch on and off the effects of some properties or to switch between
- different properties.
-
- The whichChild field specifies the index of the child to traverse, where the
- first child has index 0.
-
- A value of -1 (the default) means do not traverse any children. A value of -3
- traverses all children, making the switch behave exactly like a regular Group.
-
- FILE FORMAT/DEFAULTS
- Switch {
- whichChild -1 # SFLong
- }
-
- Texture2
-
- This property node defines a texture map and parameters for that map. This map
- is used to apply texture to subsequent shapes as they are rendered.
-
- The texture can be read from the URL specified by the filename field. To turn
- off texturing, set the filename field to an empty string ("").
-
- Textures can also be specified inline by setting the image field to contain the
- texture data. Specifying both a URL and data inline will result in undefined
- behavior.
-
- WRAP ENUM
- REPEAT Repeats texture outside 0-1 texture coordinate range
- CLAMP Clamps texture coordinates to lie within 0-1 range
-
- FILE FORMAT/DEFAULTS
- Texture2 {
- filename "" # SFString
- image 0 0 0 # SFImage
- wrapS REPEAT # SFEnum
- wrapT REPEAT # SFEnum
- }
-
- Texture2Transform
-
- This node defines a 2D transformation applied to texture coordinates. This
- affects the way textures are applied to the surfaces of subsequent shapes. The
- transformation consists of (in order) a non-uniform scale about an arbitrary
- center point, a rotation about that same point, and a translation. This allows
- a user to change the size and position of the textures on shapes.
-
- FILE FORMAT/DEFAULTS
- Texture2Transform {
- translation 0 0 # SFVec2f
- rotation 0 # SFFloat
- scaleFactor 1 1 # SFVec2f
- center 0 0 # SFVec2f
- }
-
- TextureCoordinate2
-
- This node defines a set of 2D coordinates to be used to map textures to the
- vertices of subsequent PointSet, IndexedLineSet, or IndexedFaceSet objects. It
- replaces the current texture coordinates in the rendering state for the shapes
- to use.
-
- Texture coordinates range from 0 to 1 across the texture. The horizontal
- coordinate, called S, is specified first, followed by the vertical coordinate,
- T.
-
- FILE FORMAT/DEFAULTS
- TextureCoordinate2 {
- point 0 0 # MFVec2f
- }
-
- Transform
-
- This node defines a geometric 3D transformation consisting of (in order) a
- (possibly) non-uniform scale about an arbitrary point, a rotation about an
- arbitrary point and axis, and a translation.
-
- FILE FORMAT/DEFAULTS
- Transform {
- translation 0 0 0 # SFVec3f
- rotation 0 0 1 0 # SFRotation
- scaleFactor 1 1 1 # SFVec3f
- scaleOrientation 0 0 1 0 # SFRotation
- center 0 0 0 # SFVec3f
- }
-
- The transform node
-
- Transform {
- translation T1
- rotation R1
- scaleFactor S
- scaleOrientation R2
- center T2
- }
-
- is equivalent to the sequence
-
- Translation { translation T1 }
- Translation { translation T2 }
- Rotation { rotation R1 }
- Rotation { rotation R2 }
- Scale { scaleFactor S }
- Rotation { rotation -R2 }
- Translation { translation -T2 }
-
- TransformSeparator
-
- This group node is similar to the separator node in that it saves state before
- traversing its children and restores it afterwards. However, it saves only the
- current transformation; all other state is left as is. This node can be useful
- for positioning a camera, since the transformations to the camera will not
- affect the rest of the scene, even through the camera will view the scene.
- Similarly, this node can be used to isolate transformations to light sources or
- other objects.
-
- FILE FORMAT/DEFAULTS
- TransformSeparator {
- }
-
- Translation
-
- This node defines a translation by a 3D vector.
-
- FILE FORMAT/DEFAULTS
- Translation {
- translation 0 0 0 # SFVec3f
- }
-
- WWWAnchor
-
- The WWWAnchor group node loads a new scene into a VRML browser when one of its
- children is chosen. Exactly how a user "chooses" a child of the WWWAnchor is up
- to the VRML browser; typically, clicking on one of its children with the mouse
- will result in the new scene replacing the current scene. A WWWAnchor with an
- empty ("") name does nothing when its children are chosen. The name is an
- arbitrary URL.
-
- WWWAnchor behaves like a Separator, pushing the traversal state before
- traversing its children and popping it afterwards.
-
- The description field in the WWWAnchor allows for a friendly prompt to be
- displayed as an alternative to the URL in the name field. Ideally, browsers
- will allow the user to choose the description, the URL or both to be displayed
- for a candidate WWWAnchor.
-
- The WWWAnchor's map field is an enumerated value that can be either NONE (the
- default) or POINT. If it is POINT then the object-space coordinates of the
- point on the object the user chose will be added to the URL in the name field,
- with the syntax "?x,y,z".
-
- MAP ENUM
- NONE Do not add information to the URL
- POINT Add object-space coordinates to URL
-
- FILE FORMAT/DEFAULTS
- WWWAnchor {
- name "" # SFString
- description "" # SFString
- map NONE # SFEnum
- }
-
- WWWInline
-
- The WWWInline node reads its children from anywhere in the World Wide Web.
- Exactly when its children are read is not defined; reading the children may be
- delayed until the WWWInline is actually displayed. A WWWInline with an empty
- name does nothing. The name is an arbitrary URL.
-
- The effect of referring to a non-VRML URL in a WWWInline node is undefined.
-
- If the WWWInline's bboxSize field specifies a non-empty bounding box (a
- bounding box is non-empty if at least one of its dimensions is greater than
- zero), then the WWWInline's object-space bounding box is specified by its
- bboxSize and bboxCenter fields. This allows an implementation to view-volume
- cull or LOD switch the WWWInline without reading its contents.
-
- FILE FORMAT/DEFAULTS
- WWWInline {
- name "" # SFString
- bboxSize 0 0 0 # SFVec3f
- bboxCenter 0 0 0 # SFVec3f
- }
-
- Instancing
-
- A node may be the child of more than one group. This is called "instancing"
- (using the same instance of a node multiple times, called "aliasing" or
- "multiple references" by other systems), and is accomplished by using the "USE"
- keyword.
-
- The DEF keyword both defines a named node, and creates a single instance of it.
- The USE keyword indicates that the most recently defined instance should be
- used again. If several nodes were given the same name, then the last DEF
- encountered during parsing "wins". DEF/USE is limited to a single file; there
- is no mechanism for USE'ing nodes that are DEF'ed in other files.
-
- A name goes into scope as soon as the DEF is encountered, and does not go out
- of scope until another DEF of the same name or end-of-file are encountered.
- Nodes cannot be shared between files (you cannot USE a node that was DEF'ed
- inside the file to which a WWWInline refers).
-
- For example, rendering this scene will result in three spheres being drawn.
- Both of the spheres are named 'Joe'; the second (smaller) sphere is drawn
- twice:
-
- Separator {
- DEF Joe Sphere { }
- Translation { translation 2 0 0 }
- Separator {
- DEF Joe Sphere { radius .2 }
- Translation { translation 2 0 0 }
- }
- USE Joe # radius .2 sphere will be used here
-
-
- Extensibility
-
- Extensions to VRML are supported by supporting self-describing nodes. Nodes
- that are not part of standard VRML must write out a description of their fields
- first, so that all VRML implementations are able to parse and ignore the
- extensions.
-
- This description is written just after the opening curly-brace for the node,
- and consists of the keyword 'fields' followed by a list of the types and names
- of fields used by that node, all enclosed in square brackets and separated by
- commas. For example, if Cube was not a standard VRML node, it would be written
- like this:
-
- Cube {
- fields [ SFFloat width, SFFloat height, SFFloat depth ]
- width 10 height 4 depth 3
-
-
- Specifying the fields for nodes that ARE part of standard VRML is not an error;
- VRML parsers must silently ignore the field specification.
-
- Is-a relationships
-
- A new node type may also be a superset of an existing node that is part of the
- standard. In this case, if an implementation for the new node type cannot be
- found the new node type can be safely treated as as the existing node it is
- based on (with some loss of functionality, of course). To support this, new
- node types can define an MFString field called 'isA' containing the names of
- the types of which it is a superset. For example, a new type of Material called
- "ExtendedMaterial" that adds index of refraction as a material property can be
- written as:
-
- ExtendedMaterial {
- fields [ MFString isA, MFFloat indexOfRefraction,
- MFColor ambientColor, MFColor diffuseColor,
- MFColor specularColor, MFColor emissiveColor,
- MFFloat shininess, MFFloat transparency ]
- isA [ "Material" ]
- indexOfRefraction .34
- diffuseColor .8 .54 1
-
-
- Multiple is-a relationships may be specified in order of preference;
- implementations are expected to use the first for which there is an
- implementation.
-
- An Example
-
- This is a longer example of a VRML scene. It contains a simple model of a
- track-light consisting of primitive shapes, plus three walls (built out of
- polygons) and a reference to a shape defined elsewhere, both of which are
- illuminated by a spotlight. The shape acts as a hyperlink to some HTML text.
-
- #VRML V1.0 ascii
-
- Separator {
- Separator { # Simple track-light geometry:
- Translation { translation 0 4 0 }
- Separator {
- Material { emissiveColor 0.1 0.3 0.3 }
- Cube {
- width 0.1
- height 0.1
- depth 4
- }
- }
- Rotation { rotation 0 1 0 1.57079 }
- Separator {
- Material { emissiveColor 0.3 0.1 0.3 }
- Cylinder {
- radius 0.1
- height .2
- }
- }
- Rotation { rotation -1 0 0 1.57079 }
- Separator {
- Material { emissiveColor 0.3 0.3 0.1 }
- Rotation { rotation 1 0 0 1.57079 }
- Translation { translation 0 -.2 0 }
- Cone {
- height .4
- bottomRadius .2
- }
- Translation { translation 0 .4 0 }
- Cylinder {
- radius 0.02
- height .4
- }
- }
- }
- SpotLight { # Light from above
- location 0 4 0
- direction 0 -1 0
- intensity 0.9
- cutOffAngle 0.7
- }
- Separator { # Wall geometry; just three flat polygons
- Coordinate3 {
- point [
- -2 0 -2, -2 0 2, 2 0 2, 2 0 -2,
- -2 4 -2, -2 4 2, 2 4 2, 2 4 -2]
- }
- IndexedFaceSet {
- coordIndex [ 0, 1, 2, 3, -1,
- 0, 4, 5, 1, -1,
- 0, 3, 7, 4, -1
- ]
- }
- }
- WWWAnchor { # A hyperlinked cow:
- name "http://www.foo.edu/CowProject/AboutCows.html"
-
- Separator {
- Translation { translation 0 1 0 }
- WWWInline { # Reference another object
- name "http://www.foo.edu/3DObjects/cow.wrl"
- }
- }
- }
-
-
- -------------------------------------------------------------------------------
-
- Browser Considerations
-
- This section describes the file naming and MIME conventions to be used in
- building VRML browsers and configuring WWW browsers to work with them.
-
- File Extensions
-
- The file extension for VMRL files is .wrl (for world).
-
- MIME
-
- The MIME type for VRML files is defined as follows:
-
- x-world/x-vrml
-
- The MIME major type for 3D world descriptions is x-world. The MIME minor type
- for VRML documents is x-vrml. Other 3D world descriptions, such as oogl for The
- Geometry Center's Object-Oriented Geometry Language, or iv, for SGI's Open
- Inventor ASCII format, can be supported by using different MIME minor types.
-
- [--] 26-MAY-95
-